home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / UTILITY1 / MSWLGO35.ZIP / EXAMPLES / MATCH < prev    next >
Text File  |  1993-04-12  |  3KB  |  167 lines

  1. ;
  2. ; Function:
  3. ;
  4. ; Regular expression evaluator. Similar to Regular expressions in Unix
  5. ; Utilities
  6. ;
  7. ; To run:
  8. ;
  9. ; Load "match
  10. ; Call MATCH [pattern] [sentence]
  11. ; Outputs "True or "False
  12. ;
  13. ; "pattern" must be one of ? # ! & @ ^
  14. ;
  15. ; Example:
  16. ;
  17. ; MATCH [?b?] [abc] ; Outputs "True
  18. ;
  19. TO MATCH!
  20. IF EMPTYP :SEN [OP "FALSE]
  21. IF NOT TRY.PRED [OP "FALSE]
  22. MAKE :SPECIAL.VAR FIRST :SEN
  23. OP MATCH BF :PAT BF :SEN
  24. END
  25.  
  26. TO MATCH#
  27. MAKE :SPECIAL.VAR []
  28. OP #TEST #GATHER :SEN
  29. END
  30.  
  31. TO #GATHER :SEN
  32. IF EMPTYP :SEN [OP :SEN]
  33. IF NOT TRY.PRED [OP :SEN]
  34. MAKE :SPECIAL.VAR LPUT FIRST :SEN THING :SPECIAL.VAR
  35. OP #GATHER BF :SEN
  36. END
  37.  
  38. TO #TEST :SEN
  39. IF MATCH BF :PAT :SEN [OP "TRUE]
  40. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  41. OP #TEST2 FPUT LAST THING :SPECIAL.VAR :SEN
  42. END
  43.  
  44. TO #TEST2 :SEN
  45. MAKE :SPECIAL.VAR BL THING :SPECIAL.VAR
  46. OP #TEST :SEN
  47. END
  48.  
  49. TO MATCH&
  50. OP &TEST MATCH#
  51. END
  52.  
  53. TO &TEST :TF
  54. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  55. OP :TF
  56. END
  57.  
  58. TO MATCH?
  59. MAKE :SPECIAL.VAR []
  60. IF EMPTYP :SEN [OP MATCH BF :PAT :SEN]
  61. IF NOT TRY.PRED [OP MATCH BF :PAT :SEN]
  62. MAKE :SPECIAL.VAR FIRST :SEN
  63. IF MATCH BF :PAT BF :SEN [OP "TRUE]
  64. MAKE :SPECIAL.VAR []
  65. OP MATCH BF :PAT :SEN
  66. END
  67.  
  68. TO MATCH@
  69. MAKE :SPECIAL.VAR :SEN
  70. OP @TEST []
  71. END
  72.  
  73. TO @TEST :SEN
  74. IF @TRY.PRED [IF MATCH BF :PAT :SEN [OP "TRUE]]
  75. IF EMPTYP THING :SPECIAL.VAR [OP "FALSE]
  76. OP @TEST2 FPUT LAST THING :SPECIAL.VAR :SEN
  77. END
  78.  
  79. TO @TEST2 :SEN
  80. MAKE :SPECIAL.VAR BL THING :SPECIAL.VAR
  81. OP @TEST :SEN
  82. END
  83.  
  84. TO @TRY.PRED
  85. IF LISTP :SPECIAL.PRED [OP MATCH :SPECIAL.PRED THING :SPECIAL.VAR]
  86. OP RUN LIST :SPECIAL.PRED THING :SPECIAL.VAR
  87. END
  88.  
  89. TO MATCH^
  90. MAKE :SPECIAL.VAR []
  91. OUTPUT ^TEST :SEN
  92. END
  93.  
  94. TO ^TEST :SEN
  95. IF MATCH BF :PAT :SEN [OUTPUT "TRUE]
  96. IF EMPTYP :SEN [OUTPUT "FALSE]
  97. IF NOT TRY.PRED [OUTPUT "FALSE]
  98. MAKE :SPECIAL.VAR LPUT FIRST :SEN THING :SPECIAL.VAR
  99. OUTPUT ^TEST BF :SEN
  100. END
  101.  
  102. TO ALWAYS :X
  103. OP "TRUE
  104. END
  105.  
  106. TO ANYOF :SEN
  107. OP ANYOF1 :SEN :IN.LIST
  108. END
  109.  
  110. TO ANYOF1 :SEN :PATS
  111. IF EMPTYP :PATS [OP "FALSE]
  112. IF MATCH FIRST :PATS :SEN [OP "TRUE]
  113. OP ANYOF1 :SEN BF :PATS
  114. END
  115.  
  116. TO IN :WORD
  117. OP MEMBERP :WORD :IN.LIST
  118. END
  119.  
  120. TO MATCH :PAT :SEN
  121. LOCAL [SPECIAL.VAR SPECIAL.PRED SPECIAL.BUFFER IN.LIST]
  122. IF OR WORDP :PAT WORDP :SEN [OP "FALSE]
  123. IF EMPTYP :PAT [OP EMPTYP :SEN]
  124. IF LISTP FIRST :PAT [OP SPECIAL FPUT "!: :PAT :SEN]
  125. IF MEMBERP FIRST FIRST :PAT [? # ! & @ ^] [OP SPECIAL :PAT :SEN]
  126. IF EMPTYP :SEN [OP "FALSE]
  127. IF EQUALP FIRST :PAT FIRST :SEN [OP MATCH BF :PAT BF :SEN]
  128. OP "FALSE
  129. END
  130.  
  131. TO PARSE.SPECIAL :WORD :VAR
  132. IF EMPTYP :WORD [OP LIST :VAR "ALWAYS]
  133. IF EQUALP FIRST :WORD ": [OP LIST :VAR BF :WORD]
  134. OP PARSE.SPECIAL BF :WORD WORD :VAR FIRST :WORD
  135. END
  136.  
  137. TO QUOTED :THING
  138. IF LISTP :THING [OP :THING]
  139. OP WORD "" :THING
  140. END
  141.  
  142. TO SET.IN
  143. MAKE "IN.LIST FIRST BF :PAT
  144. MAKE "PAT FPUT FIRST :PAT BF BF :PAT
  145. END
  146.  
  147. TO SET.SPECIAL :LIST
  148. MAKE "SPECIAL.VAR FIRST :LIST
  149. MAKE "SPECIAL.PRED LAST :LIST
  150. IF EMPTYP :SPECIAL.VAR [MAKE "SPECIAL.VAR "SPECIAL.BUFFER]
  151. IF MEMBERP :SPECIAL.PRED [IN ANYOF] [SET.IN]
  152. IF NOT EMPTYP :SPECIAL.PRED [STOP]
  153. MAKE "SPECIAL.PRED FIRST BF :PAT
  154. MAKE "PAT FPUT FIRST :PAT BF BF :PAT
  155. END
  156.  
  157. TO SPECIAL :PAT :SEN
  158. SET.SPECIAL PARSE.SPECIAL BF FIRST :PAT "
  159. OP RUN FPUT WORD "MATCH FIRST FIRST :PAT []
  160. END
  161.  
  162. TO TRY.PRED
  163. IF LISTP :SPECIAL.PRED [OP MATCH :SPECIAL.PRED FIRST :SEN]
  164. OP RUN LIST :SPECIAL.PRED QUOTED FIRST :SEN
  165. END
  166.  
  167.